/**巧克力块分布插件 chocolate.js
作者：		三牙西瓜
email：		felixzxk@163.com
参数说明：
【cols】整数数组，默认[5,4,3,2,1]，五个元素，依次是2048px-256px分为5个宽度等级的容器时，所分的列数；如果不足5个元素，则会使用默认值补位，如果有6个或以上的的元素，则会忽略多余的元素；
【margin】整数，默认0，列间距，单位是px；
【height】整数，默认“auto”，单位px。
----------------------------
版本：		v0.1
更新时间：	2015年1月4日
创建
----------------------------
版本：		v0.2
更新时间：	2015年2月14日
添加对参数类型的检测

----------------------------
版本：		v0.3
更新时间：	2016年1月9日
将cols属性的值由以前的string换成array，添加了使用默认值补位的功能
*/

(function ($) {
    $.fn.extend({
        "chocolate": function (options) {
            var opts = $.extend({}, defaluts, options),
				cols = opts.cols,
				margin = opts.margin,
				height = opts.height,
				p_wrap_width = $(this).width(),
				item = $(this).find(".chItem");
			//	item.css("float","left")
			//$(this).height(10).css("overflow","hidden");
			if(typeof height != "number" && height !== "auto"){
					throw "参数height，需要使用number类型的数据或者“auto”"
			}else if(typeof margin != "number"){
				throw "参数margin，需要使用number类型的数据"
			}else if(!(cols instanceof Array)){
				throw "参数cols，需要使用array类型的数据"
			}else{
				if(typeof height == "number" && height > 1){
					height += "px"
				}else{
					height = "auto"
				};
				for(var ai = 0,al = cols.length;ai < al; ai++){
					if(typeof cols[ai] != "number"){
						throw "cols数组中的元素数据类型必须是整数"	
					}
				}
			};
			
			/**块元素的父元素的宽度等级*/
			var wrap_w_lv = function(){
				if(p_wrap_width >= 2048){
					return 1
				}else if(p_wrap_width < 2048 && p_wrap_width >= 1024){
					return 2
				}else if (p_wrap_width < 1024 && p_wrap_width >= 512) {
					return 3
				}else if (p_wrap_width < 512 && p_wrap_width >= 256) {
					return 4;
				}else if (p_wrap_width < 256) {
					return 5
				}
			};
			var item_w = function(i){
				var iw,
					cols_i = new Number();
				if(typeof cols[i] != "number"){
					cols_i = defaluts.cols[i];
				}else{
					cols_i = parseInt(cols[i]);
				}
				return iw = Math.floor((p_wrap_width-(cols_i-1)*margin)/cols_i);
			};
			var item_width,
				cols_c;
			
			switch(wrap_w_lv()){
				case 1:
				item_width = item_w(0);
				cols_c = 0;
				break;
				case 2:
				item_width = item_w(1);
				cols_c = 1
				break;
				case 3:
				item_width = item_w(2);
				cols_c = 2;
				break;
				case 4:
				item_width = item_w(3);
				cols_c = 4;
				break;
				case 5 :
				item_width = item_w(4);
				cols_c = 4;
				break;
			};
			item.css({
				margin: margin+"px "+margin+"px 0 0",
				float: "left",
				height: height,
				"line-height": height,
				width: item_width + "px"
			});
			if($(this).is("ul") && !$(this).children().last().hasClass("clear")){
				$(this).append("<li class='clear'></li>")
			}else if ($(this).is("div") && !$(this).children().last().hasClass("clear")){
				$(this).append("<div class='clear'></div>")
			};
			var cols_current;
			if(cols[cols_c]){
				cols_current = cols[cols_c];
			}else{
				cols_current = 1;
			};
			
			$(this).children(".chItem:nth-child("+cols_current+"n)").css({
				"margin-right": 0,
				width: (p_wrap_width - (cols_current-1) *(item_width+margin))+"px"
			});
		}
    });
	var defaluts = {
		cols: [5,4,3,2,1],
		margin: 5,
		height: "auto"
	};
})(window.jQuery);